package top.whysu.gps.utils;

import java.math.RoundingMode;
import java.text.NumberFormat;

/**
 * 计算经纬度
 */
public class CalculationUtil {
    /**
     * 经纬度格式转成度
     * <p>
     * 经纬度格式分为三种：度、度-分、度-份-秒
     * 1.） ddd.ddddd°【度 . 度 格式】的十进制小数部分（5位）
     * 2.） 00°00.00000' 【度 . 分 . 分 格式】的十进制小数部分（3位）
     * 3.)  ddd°mm'ss'' 【度 . 分 . 秒 格式】
     *
     * @param lng 三种不同格式的经纬度
     * @return 格式为度的经纬度
     */
    public static Double transformPos(String lng) {
        String[] lntArr = lng
                .trim()
                .replace("°", ";")
                .replace("度", ";")
                .replace("′", ";")
                .replace("'", ";")
                .replace("分", ";")
                .replace("\"", "")
                .replace("''", "")
                .replace("秒", "")
                .split(";");
        Double result = 0D;
        for (int i = lntArr.length; i > 0; i--) {
            double v = Double.parseDouble(lntArr[i - 1]);
            if (i == 1) {
                result = v + result;
            } else {
                result = (result + v) / 60;
            }
        }
        // 保留6位小数
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(6);
        // 如果不需要四舍五入，可以使用RoundingMode.DOWN
        nf.setRoundingMode(RoundingMode.DOWN);
        result = Double.valueOf(nf.format(result));
        return result;
    }
}